/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {number[]}
*/
var nodesBetweenCriticalPoints = function (head) {
let p1 = head
let p2 = head.next
let p3 = head.next.next
let i = 2
let di = []
let mind = maxd = -1
if (!p3) return [mind, maxd]
while (p3) {
if (p2.val > p1.val && p2.val > p3.val) {
// console.log(`local max ${p2.val}, index ${i}`)
di.push(i)
}
if (p2.val < p1.val && p2.val < p3.val) {
// console.log(`local min ${p2.val}, index ${i}`)
di.push(i)
}
p3 = p3.next
p2 = p2.next
p1 = p1.next
i++
}
if (di.length < 2) return [mind, maxd]
mind = minDifference(di)
maxd = di[di.length - 1] - di[0]
return [mind, maxd]
};
function minDifference(a) {
let minDiff = a[1] - a[0]
for (let i = 2; i != a.length ; i++) {
minDiff = Math.min(minDiff, a[i] - a[i - 1])
}
return minDiff
}